1
Bí ẩn đồng xu và thực tế số dấu phẩy động
AI017Lesson 3
00:00

Sự mâu thuẫn cơ bản trong vật lý tính toán xuất phát từ việc máy tính biểu diễn các số thực bằng cách sử dụng toán học dấu phẩy động nhị phân. Khác với tư duy thập phân (Base-10) của con người, phần cứng lưu trữ giá trị dưới dạng nhị phân (Base-2). Điều này dẫn đến một hiện tượng bộc lộ sự trừu tượng: các phân số thập phân đơn giản như 0.1 không thể được biểu diễn chính xác.

1. Thực tế về số dấu phẩy động

Go cung cấp hai kiểu dữ liệu chính cho số thực: float32float64. Khi sử dụng cú pháp khai báo biến ngắn gọn như price := 0.0, Go mặc định sử dụng float64. Các kiểu này chỉ là những xấp xỉ của thực tế, chứ không phải các giá trị toán học chính xác.

0,1 + 0,1 = ?Gopher: "Tại sao nó lại không phải là 0,2?"0,0001100110011...

2. Bí ẩn của 0,1

Trong hệ cơ số 10, $1/3$ tạo ra một số thập phân vô hạn lặp lại ($0,333...$). Trong hệ cơ số 2, giá trị $0,1$ tạo ra một phân số lặp vô hạn. Vì bộ nhớ máy tính có giới hạn, phân số này bị cắt ngắn, dẫn đến sai số tích lũy. Ví dụ, $0,1 + 0,2$ cho kết quả là $0,30000000000000004$ thay vì đúng bằng $0,3$.

Cảnh báo: Không bao giờ dùng == để so sánh các số dấu phẩy động trong các mạch logic, vì những sai lệch vi mô này sẽ khiến phép so sánh thất bại.

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>